package Terminal.View.Gestori;

import Terminal.Controller.CAutenticarsi;
import Terminal.Controller.CSession;
import Terminal.Eccezioni.ExceptionCredenzialiErrate;
import Terminal.View.JPannelloAutenticazione;
import Terminal.View.TimeLoggingFrame;

public class GestoreAutenticazione extends GestoreInterfaccia{

	private static GestoreAutenticazione _istanza;
	private CAutenticarsi controller = new CAutenticarsi();
	private JPannelloAutenticazione login;
	
	private GestoreAutenticazione()
	{
		
	}
	
	public static GestoreAutenticazione istanza()
	{
		if (_istanza == null)
			_istanza = new GestoreAutenticazione();
		return _istanza;
	}

	private void autentica() {
	
		TimeLoggingFrame frame = TimeLoggingFrame.istanza();
		String username = this.login.getUsername();
		String password = this.login.getPassword();
		
		try{
		controller.autentica(username, password);
		
			if( CSession.instanza().getLoggato() != null)
			{
				frame.getPannello().remove(this.login);
				this.smista("GestireProgetti", "Visualizza");
			}
		}
		catch(ExceptionCredenzialiErrate e){
			this.smista("Errore","CredenzialiErrate");
		}
		catch (Exception e1) {
			e1.printStackTrace();
		}
	}

	private void visualizza() {
		TimeLoggingFrame frame = TimeLoggingFrame.istanza();
		
		JPannelloAutenticazione pannello = new JPannelloAutenticazione();
		this.login = pannello;
		
		frame.getPannello().add(pannello);
		frame.getPannello().validate();
		frame.getPannello().repaint();
	}
	
	private void logout()
	{
		TimeLoggingFrame.istanza().getPannello().pulisci();
		controller.logout();
		this.visualizza();
	}
	
	@Override
	public void smistaScenario(String scenario)
	{
		switch (scenario) 
		{
			case "Visualizza": 
				this.visualizza();
				break;
				
			case "Autentica": 
				this.autentica();
				break;
				
			case "Logout": 
				this.logout();
				break;	
	
			default:
				this.visualizza();
				break;
		}
				
	}	
	
}
